Необходимые библиотеки
Разработано на основе материалов Bojanowski and Jasny (2025), URL: statnet.org
# install.packages("igraph")
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
# install.packages("intergraph")
library(intergraph) # для конвертации между форматами
Узнать больше о пакете igraph можно на сайте разработчиков. Обзор основных
функций приводится в виньетке.
Базовый функционал igraph
Создание простых графов
make_graph(c(1, 2, 2, 3, 3, 4), directed = FALSE) %>% plot()
make_graph(~ A - B, B - C:D:E) %>% plot()
g = make_graph(~ A --+ B, B +-- C, A --+ D:E, B --+ A)
g
## IGRAPH 4fc6eb6 DN-- 5 5 --
## + attr: name (v/c)
## + edges from 4fc6eb6 (vertex names):
## [1] A->B A->D A->E B->A C->B
plot(g) # граф с прошлой пары
Загрузка данных и конвертация в граф
load("introToSNAinR.Rdata")
summary(contig_1993)
## Network attributes:
## vertices = 186
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## total edges = 534
## missing edges = 0
## non-missing edges = 534
## density = 0.03103749
##
## Vertex attributes:
##
## State.Abb:
## character valued attribute
## attribute summary:
## the 10 most common values are:
## AAB AFG ALB ALG AND ANG ARG ARM AUL AUS
## 1 1 1 1 1 1 1 1 1 1
##
## State.Num:
## integer valued attribute
## 186 values
## vertex.names:
## character valued attribute
## 186 valid vertex names
##
## Edge attributes:
##
## ContType:
## numeric valued attribute
## attribute summary:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 2.457 4.000 5.000
##
## Network edgelist matrix:
## [,1] [,2]
## [1,] 2 1
## [2,] 3 1
## [3,] 4 1
## [4,] 16 1
## [5,] 68 1
## [6,] 4 3
## [7,] 5 3
## [8,] 6 3
## [9,] 7 3
## [10,] 5 4
## [11,] 6 4
## [12,] 7 4
## [13,] 16 4
## [14,] 17 4
## [15,] 19 4
## [16,] 6 5
## [17,] 7 5
## [18,] 24 5
## [19,] 7 6
## [20,] 15 6
## [21,] 24 6
## [22,] 25 6
## [23,] 19 7
## [24,] 21 7
## [25,] 24 7
## [26,] 9 8
## [27,] 11 8
## [28,] 12 8
## [29,] 13 8
## [30,] 25 8
## [31,] 26 8
## [32,] 27 8
## [33,] 10 9
## [34,] 11 9
## [35,] 12 9
## [36,] 13 9
## [37,] 14 9
## [38,] 25 9
## [39,] 26 9
## [40,] 11 10
## [41,] 12 10
## [42,] 13 10
## [43,] 15 10
## [44,] 25 10
## [45,] 13 11
## [46,] 14 11
## [47,] 15 11
## [48,] 25 11
## [49,] 26 11
## [50,] 13 12
## [51,] 14 12
## [52,] 15 12
## [53,] 25 12
## [54,] 26 12
## [55,] 14 13
## [56,] 15 13
## [57,] 25 13
## [58,] 26 13
## [59,] 15 14
## [60,] 25 14
## [61,] 25 15
## [62,] 17 16
## [63,] 18 16
## [64,] 19 16
## [65,] 18 17
## [66,] 19 17
## [67,] 19 18
## [68,] 20 18
## [69,] 21 18
## [70,] 22 18
## [71,] 20 19
## [72,] 21 19
## [73,] 21 20
## [74,] 22 20
## [75,] 22 21
## [76,] 23 21
## [77,] 24 21
## [78,] 23 22
## [79,] 24 22
## [80,] 24 23
## [81,] 25 24
## [82,] 28 24
## [83,] 29 24
## [84,] 30 24
## [85,] 26 25
## [86,] 30 25
## [87,] 27 26
## [88,] 30 26
## [89,] 30 27
## [90,] 29 28
## [91,] 30 29
## [92,] 31 29
## [93,] 33 29
## [94,] 31 30
## [95,] 32 30
## [96,] 34 30
## [97,] 35 30
## [98,] 32 31
## [99,] 33 31
## [100,] 34 31
## [101,] 34 32
## [102,] 34 33
## [103,] 35 34
## [104,] 37 36
## [105,] 38 36
## [106,] 39 36
## [107,] 41 36
## [108,] 48 36
## [109,] 79 36
## [110,] 80 36
## [111,] 41 37
## [112,] 39 38
## [113,] 41 38
## [114,] 48 38
## [115,] 79 38
## [116,] 80 38
## [117,] 40 39
## [118,] 41 39
## [119,] 48 39
## [120,] 80 39
## [121,] 41 40
## [122,] 48 40
## [123,] 42 41
## [124,] 44 41
## [125,] 45 41
## [126,] 46 41
## [127,] 48 41
## [128,] 54 41
## [129,] 80 41
## [130,] 130 41
## [131,] 131 41
## [132,] 45 42
## [133,] 54 42
## [134,] 44 43
## [135,] 50 43
## [136,] 48 44
## [137,] 50 44
## [138,] 54 44
## [139,] 46 45
## [140,] 47 45
## [141,] 54 45
## [142,] 129 45
## [143,] 130 45
## [144,] 131 45
## [145,] 129 47
## [146,] 49 48
## [147,] 50 48
## [148,] 52 48
## [149,] 68 48
## [150,] 69 48
## [151,] 70 48
## [152,] 71 48
## [153,] 78 48
## [154,] 79 48
## [155,] 80 48
## [156,] 52 49
## [157,] 53 49
## [158,] 68 49
## [159,] 69 49
## [160,] 70 49
## [161,] 71 49
## [162,] 72 49
## [163,] 73 49
## [164,] 77 49
## [165,] 78 49
## [166,] 80 49
## [167,] 51 50
## [168,] 52 50
## [169,] 53 50
## [170,] 54 50
## [171,] 62 50
## [172,] 53 51
## [173,] 59 51
## [174,] 60 51
## [175,] 62 51
## [176,] 67 51
## [177,] 72 51
## [178,] 53 52
## [179,] 72 53
## [180,] 55 54
## [181,] 56 54
## [182,] 57 54
## [183,] 59 54
## [184,] 60 54
## [185,] 62 54
## [186,] 63 54
## [187,] 130 54
## [188,] 131 54
## [189,] 132 54
## [190,] 57 56
## [191,] 63 56
## [192,] 131 56
## [193,] 132 56
## [194,] 58 57
## [195,] 59 57
## [196,] 60 57
## [197,] 63 57
## [198,] 60 58
## [199,] 63 58
## [200,] 65 58
## [201,] 60 59
## [202,] 61 59
## [203,] 62 59
## [204,] 63 59
## [205,] 61 60
## [206,] 65 60
## [207,] 67 60
## [208,] 64 63
## [209,] 65 63
## [210,] 132 63
## [211,] 135 63
## [212,] 137 63
## [213,] 135 64
## [214,] 137 64
## [215,] 138 64
## [216,] 139 64
## [217,] 141 64
## [218,] 67 65
## [219,] 72 65
## [220,] 135 65
## [221,] 67 66
## [222,] 72 66
## [223,] 72 67
## [224,] 135 67
## [225,] 69 68
## [226,] 70 68
## [227,] 71 68
## [228,] 72 68
## [229,] 73 68
## [230,] 75 68
## [231,] 76 68
## [232,] 77 68
## [233,] 78 68
## [234,] 79 68
## [235,] 80 68
## [236,] 135 68
## [237,] 150 68
## [238,] 154 68
## [239,] 155 68
## [240,] 156 68
## [241,] 158 68
## [242,] 159 68
## [243,] 160 68
## [244,] 70 69
## [245,] 77 69
## [246,] 78 69
## [247,] 80 69
## [248,] 71 70
## [249,] 73 70
## [250,] 77 70
## [251,] 78 70
## [252,] 80 70
## [253,] 73 71
## [254,] 77 71
## [255,] 78 71
## [256,] 80 71
## [257,] 73 72
## [258,] 75 72
## [259,] 135 72
## [260,] 75 74
## [261,] 76 74
## [262,] 134 74
## [263,] 135 74
## [264,] 76 75
## [265,] 135 75
## [266,] 134 76
## [267,] 135 76
## [268,] 150 76
## [269,] 154 76
## [270,] 78 77
## [271,] 79 77
## [272,] 79 78
## [273,] 80 78
## [274,] 80 79
## [275,] 88 82
## [276,] 85 83
## [277,] 99 83
## [278,] 100 83
## [279,] 101 83
## [280,] 88 84
## [281,] 93 84
## [282,] 99 85
## [283,] 100 85
## [284,] 101 85
## [285,] 88 86
## [286,] 88 87
## [287,] 90 87
## [288,] 91 87
## [289,] 92 87
## [290,] 93 87
## [291,] 94 87
## [292,] 130 87
## [293,] 90 88
## [294,] 93 88
## [295,] 91 89
## [296,] 94 89
## [297,] 97 89
## [298,] 98 89
## [299,] 100 89
## [300,] 129 90
## [301,] 130 90
## [302,] 94 91
## [303,] 99 91
## [304,] 100 91
## [305,] 103 91
## [306,] 130 91
## [307,] 132 91
## [308,] 93 92
## [309,] 94 92
## [310,] 95 92
## [311,] 97 92
## [312,] 95 93
## [313,] 96 93
## [314,] 97 94
## [315,] 98 94
## [316,] 96 95
## [317,] 98 97
## [318,] 100 97
## [319,] 100 98
## [320,] 100 99
## [321,] 101 99
## [322,] 102 99
## [323,] 103 99
## [324,] 104 99
## [325,] 101 100
## [326,] 103 100
## [327,] 104 101
## [328,] 115 101
## [329,] 103 102
## [330,] 104 102
## [331,] 105 102
## [332,] 133 102
## [333,] 132 103
## [334,] 133 103
## [335,] 105 104
## [336,] 115 104
## [337,] 106 105
## [338,] 108 105
## [339,] 109 105
## [340,] 110 105
## [341,] 115 105
## [342,] 117 105
## [343,] 133 105
## [344,] 107 106
## [345,] 108 106
## [346,] 110 106
## [347,] 133 106
## [348,] 108 107
## [349,] 111 107
## [350,] 113 107
## [351,] 133 107
## [352,] 109 108
## [353,] 110 108
## [354,] 111 108
## [355,] 116 108
## [356,] 117 108
## [357,] 119 108
## [358,] 126 108
## [359,] 128 108
## [360,] 110 109
## [361,] 112 111
## [362,] 113 111
## [363,] 143 111
## [364,] 148 111
## [365,] 113 112
## [366,] 114 112
## [367,] 142 112
## [368,] 143 112
## [369,] 114 113
## [370,] 133 113
## [371,] 142 113
## [372,] 143 113
## [373,] 133 114
## [374,] 142 114
## [375,] 143 114
## [376,] 117 115
## [377,] 121 115
## [378,] 117 116
## [379,] 118 116
## [380,] 119 116
## [381,] 120 116
## [382,] 124 116
## [383,] 125 116
## [384,] 126 116
## [385,] 128 116
## [386,] 118 117
## [387,] 119 117
## [388,] 121 117
## [389,] 123 117
## [390,] 120 118
## [391,] 123 118
## [392,] 121 120
## [393,] 122 120
## [394,] 123 120
## [395,] 124 120
## [396,] 123 121
## [397,] 126 125
## [398,] 128 125
## [399,] 128 126
## [400,] 128 127
## [401,] 130 129
## [402,] 131 130
## [403,] 132 130
## [404,] 132 131
## [405,] 133 132
## [406,] 135 132
## [407,] 137 132
## [408,] 137 133
## [409,] 142 133
## [410,] 143 133
## [411,] 135 134
## [412,] 136 134
## [413,] 142 134
## [414,] 144 134
## [415,] 145 134
## [416,] 146 134
## [417,] 147 134
## [418,] 148 134
## [419,] 149 134
## [420,] 150 134
## [421,] 154 134
## [422,] 163 134
## [423,] 136 135
## [424,] 137 135
## [425,] 138 135
## [426,] 139 135
## [427,] 141 135
## [428,] 138 136
## [429,] 140 136
## [430,] 142 136
## [431,] 144 136
## [432,] 145 136
## [433,] 146 136
## [434,] 138 137
## [435,] 139 137
## [436,] 140 137
## [437,] 141 137
## [438,] 142 137
## [439,] 139 138
## [440,] 140 138
## [441,] 141 138
## [442,] 141 139
## [443,] 141 140
## [444,] 142 140
## [445,] 142 141
## [446,] 143 142
## [447,] 144 142
## [448,] 145 142
## [449,] 146 142
## [450,] 147 142
## [451,] 148 142
## [452,] 148 143
## [453,] 145 144
## [454,] 146 144
## [455,] 146 145
## [456,] 147 145
## [457,] 148 145
## [458,] 147 146
## [459,] 148 146
## [460,] 148 147
## [461,] 163 148
## [462,] 150 149
## [463,] 151 149
## [464,] 153 149
## [465,] 155 149
## [466,] 163 149
## [467,] 153 150
## [468,] 154 150
## [469,] 152 151
## [470,] 153 151
## [471,] 155 151
## [472,] 153 152
## [473,] 154 152
## [474,] 155 152
## [475,] 154 153
## [476,] 155 154
## [477,] 156 155
## [478,] 157 155
## [479,] 158 155
## [480,] 159 155
## [481,] 160 155
## [482,] 161 155
## [483,] 162 155
## [484,] 163 155
## [485,] 165 155
## [486,] 168 155
## [487,] 171 155
## [488,] 172 155
## [489,] 176 155
## [490,] 160 157
## [491,] 176 157
## [492,] 159 158
## [493,] 160 158
## [494,] 160 159
## [495,] 176 160
## [496,] 162 161
## [497,] 163 161
## [498,] 164 161
## [499,] 165 161
## [500,] 166 161
## [501,] 167 161
## [502,] 168 161
## [503,] 169 161
## [504,] 173 161
## [505,] 177 161
## [506,] 165 164
## [507,] 169 165
## [508,] 171 165
## [509,] 177 165
## [510,] 170 169
## [511,] 171 169
## [512,] 172 169
## [513,] 173 169
## [514,] 177 169
## [515,] 171 170
## [516,] 172 170
## [517,] 173 170
## [518,] 172 171
## [519,] 173 172
## [520,] 177 172
## [521,] 174 173
## [522,] 175 173
## [523,] 176 173
## [524,] 177 173
## [525,] 177 174
## [526,] 176 175
## [527,] 177 176
## [528,] 178 177
## [529,] 179 177
## [530,] 185 177
## [531,] 179 178
## [532,] 182 179
## [533,] 185 179
## [534,] 182 181
Наивный перевод из network в graph: по
составным частям
Синтаксис graph_from_{...} позволяет создавать графы из
разных форматов представления данных, например: матриц смежности
(adjacency_matrix), датафреймов (data_frame)
или списков рёбер в формате matrix, как ниже:
guerre = network::as.edgelist(contig_1993) %>% graph_from_edgelist(directed = FALSE)
guerre
## IGRAPH 9a6678d U--- 185 534 --
## + edges from 9a6678d:
## [1] 1-- 2 1-- 3 1-- 4 1--16 1--68 3-- 4 3-- 5 3-- 6 3-- 7 4-- 5
## [11] 4-- 6 4-- 7 4--16 4--17 4--19 5-- 6 5-- 7 5--24 6-- 7 6--15
## [21] 6--24 6--25 7--19 7--21 7--24 8-- 9 8--11 8--12 8--13 8--25
## [31] 8--26 8--27 9--10 9--11 9--12 9--13 9--14 9--25 9--26 10--11
## [41] 10--12 10--13 10--15 10--25 11--13 11--14 11--15 11--25 11--26 12--13
## [51] 12--14 12--15 12--25 12--26 13--14 13--15 13--25 13--26 14--15 14--25
## [61] 15--25 16--17 16--18 16--19 17--18 17--19 18--19 18--20 18--21 18--22
## [71] 19--20 19--21 20--21 20--22 21--22 21--23 21--24 22--23 22--24 23--24
## [81] 24--25 24--28 24--29 24--30 25--26 25--30 26--27 26--30 27--30 28--29
## + ... omitted several edges
Проблема: кажется, мы потеряли один узел (почему?)
Конвертация с помощью intergraph
guerre_full = asIgraph(contig_1993)
guerre_full
## IGRAPH a19d05e U--- 186 534 --
## + attr: na (v/l), State.Abb (v/c), State.Num (v/n), vertex.names (v/c),
## | ContType (e/n), na (e/l)
## + edges from a19d05e:
## [1] 1-- 2 1-- 3 1-- 4 1--16 1--68 3-- 4 3-- 5 3-- 6 3-- 7 4-- 5
## [11] 4-- 6 4-- 7 4--16 4--17 4--19 5-- 6 5-- 7 5--24 6-- 7 6--15
## [21] 6--24 6--25 7--19 7--21 7--24 8-- 9 8--11 8--12 8--13 8--25
## [31] 8--26 8--27 9--10 9--11 9--12 9--13 9--14 9--25 9--26 10--11
## [41] 10--12 10--13 10--15 10--25 11--13 11--14 11--15 11--25 11--26 12--13
## [51] 12--14 12--15 12--25 12--26 13--14 13--15 13--25 13--26 14--15 14--25
## [61] 15--25 16--17 16--18 16--19 17--18 17--19 18--19 18--20 18--21 18--22
## + ... omitted several edges
plot(guerre_full, layout = layout_nicely,
vertex.label = V(guerre_full)$State.Abb,
vertex.size = 3,
vertex.label.cex = 0.5,
vertex.label.dist = 1)
Продвинутые характеристики сетей
Основные метрики сети в igraph
Описательная статистика
# Узлы
vcount(guerre_full)
## [1] 186
# Рёбра
ecount(guerre_full)
## [1] 534
# Диады можно посчитать вручную. Направленный граф:
vcount(guerre_full) * (vcount(guerre_full) - 1)
## [1] 34410
# Диады для ненаправленного графа (наш случай):
vcount(guerre_full) * (vcount(guerre_full) - 1) / 2
## [1] 17205
Метрики центральности
# Degree / Степень связности
deg = degree(guerre_full, mode = "all")
# Indegree, outdegree (имеет смысл только для направленных графов)
ideg = degree(guerre_full, mode = "in")
odeg = degree(guerre_full, mode = "out")
# Betweenness / Степень посредничества
bet = betweenness(guerre_full, directed = F)
# Closeness
clo = closeness(guerre_full, mode = "all")
# Eigenvector centrality
eig = eigen_centrality(guerre_full, directed = F)$vector
data.frame(deg = deg, ideg = ideg, odeg = odeg, bet = bet, clo = clo, eig = eig) %>% skimr::skim()
| Name | Piped data |
| Number of rows | 186 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| numeric | 6 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| deg | 0 | 1.00 | 5.74 | 3.49 | 0 | 4 | 5.00 | 7.00 | 22.00 | ▆▇▂▁▁ |
| ideg | 0 | 1.00 | 5.74 | 3.49 | 0 | 4 | 5.00 | 7.00 | 22.00 | ▆▇▂▁▁ |
| odeg | 0 | 1.00 | 5.74 | 3.49 | 0 | 4 | 5.00 | 7.00 | 22.00 | ▆▇▂▁▁ |
| bet | 0 | 1.00 | 378.72 | 904.81 | 0 | 0 | 26.86 | 291.87 | 7944.28 | ▇▁▁▁▁ |
| clo | 5 | 0.97 | 0.00 | 0.00 | 0 | 0 | 0.00 | 0.00 | 0.00 | ▅▆▇▆▁ |
| eig | 0 | 1.00 | 0.10 | 0.17 | 0 | 0 | 0.02 | 0.12 | 1.00 | ▇▁▁▁▁ |
# Почему есть пропущенные значения для степени близости?
# Centralization measures
centr_degree(guerre_full, mode = "in", normalized = TRUE)
## $res
## [1] 5 1 5 8 5 7 7 7 8 6 8 8 9 6 7 5 4 6 7 4 7 5 3 10 12
## [26] 8 3 2 5 9 5 3 3 5 2 7 2 6 6 3 14 3 2 5 8 2 2 16 12 8
## [51] 7 4 5 15 1 5 6 4 7 8 2 4 10 6 6 2 6 22 7 9 8 10 5 4 5
## [76] 7 7 9 7 12 0 1 4 2 4 1 7 6 5 4 8 5 6 6 3 2 5 4 8 9
## [101] 6 5 6 5 9 5 5 11 3 4 6 5 7 5 5 9 8 4 3 6 4 1 4 2 3
## [126] 4 1 5 4 9 6 10 11 14 16 8 10 7 5 5 7 15 7 5 7 7 5 8 6 6
## [151] 4 4 5 7 18 2 3 4 4 6 11 2 5 2 6 1 1 2 7 4 5 6 8 2 2
## [176] 6 10 2 4 0 1 2 0 0 2 0
##
## $centralization
## [1] 0.08788143
##
## $theoretical_max
## [1] 34410
centr_eigen(guerre_full, directed = F, normalized = TRUE)
## $vector
## [1] 1.165389e-01 1.274446e-02 1.686722e-02 1.957601e-02 5.658355e-03
## [6] 5.974568e-03 6.490791e-03 7.018465e-04 8.228612e-04 7.345685e-04
## [11] 8.670060e-04 8.670060e-04 9.524734e-04 7.345685e-04 1.314824e-03
## [16] 1.647764e-02 4.989506e-03 3.560277e-03 6.011541e-03 1.444095e-03
## [21] 2.432925e-03 1.200474e-03 7.071547e-04 2.833025e-03 1.892933e-03
## [26] 7.740745e-04 2.415303e-04 3.597214e-04 4.563691e-04 7.327007e-04
## [31] 1.655161e-04 1.124247e-04 8.220565e-05 1.298266e-04 9.432420e-05
## [36] 3.629392e-01 8.576023e-02 3.544852e-01 3.225323e-01 1.750453e-01
## [41] 4.212768e-01 8.279326e-02 4.365299e-02 1.911604e-01 1.175827e-01
## [46] 5.892855e-02 1.619899e-02 8.568550e-01 7.496100e-01 2.080150e-01
## [51] 1.227737e-01 2.183454e-01 1.821322e-01 2.182257e-01 2.386470e-02
## [56] 7.917775e-02 7.386244e-02 4.911199e-02 8.196923e-02 8.949123e-02
## [61] 1.875056e-02 6.900305e-02 1.574433e-01 1.133676e-01 1.282971e-01
## [66] 5.381142e-02 1.253427e-01 1.000000e+00 5.764095e-01 6.739811e-01
## [71] 6.171600e-01 3.667243e-01 3.726344e-01 1.217456e-01 2.337585e-01
## [76] 2.640135e-01 5.252244e-01 6.864561e-01 4.991845e-01 7.787257e-01
## [81] 1.009510e-19 5.877742e-04 3.764733e-03 1.010382e-03 3.764733e-03
## [86] 5.877742e-04 2.294845e-02 5.374775e-03 7.782116e-03 2.014964e-02
## [91] 4.133784e-02 4.502223e-03 3.864450e-03 9.232948e-03 9.728116e-04
## [96] 5.289929e-04 4.150946e-03 3.707128e-03 1.328771e-02 1.273302e-02
## [101] 4.640321e-03 1.563059e-02 3.399885e-02 5.636564e-03 1.473807e-02
## [106] 1.344698e-02 1.838619e-02 1.003883e-02 3.205006e-03 4.530578e-03
## [111] 2.646671e-02 3.367427e-02 4.290661e-02 3.848512e-02 3.245648e-03
## [116] 2.298843e-03 3.765543e-03 7.950921e-04 1.761015e-03 5.490997e-04
## [121] 8.986327e-04 6.004840e-05 6.570626e-04 3.114451e-04 6.012343e-04
## [126] 1.590839e-03 1.758668e-04 1.608176e-03 3.054549e-02 1.253853e-01
## [131] 1.218559e-01 1.526366e-01 7.526938e-02 2.304333e-01 3.850713e-01
## [136] 1.332883e-01 1.579871e-01 1.183166e-01 9.784722e-02 7.435898e-02
## [141] 1.200002e-01 1.503675e-01 4.970117e-02 7.633539e-02 9.197175e-02
## [146] 9.197175e-02 7.130753e-02 8.731210e-02 1.043701e-01 2.086274e-01
## [151] 5.974743e-02 7.258307e-02 7.435315e-02 2.345784e-01 2.950413e-01
## [156] 1.416230e-01 6.125789e-02 1.830695e-01 1.830695e-01 1.959287e-01
## [161] 7.096244e-02 4.002540e-02 8.618707e-02 1.374308e-02 5.470819e-02
## [166] 7.760305e-03 7.760305e-03 4.002540e-02 3.433179e-02 1.833544e-02
## [171] 4.958776e-02 5.102796e-02 3.271694e-02 7.580463e-03 1.114430e-02
## [176] 6.918967e-02 3.660098e-02 4.555993e-03 5.060324e-03 1.009510e-19
## [181] 6.124970e-05 5.600847e-04 1.009510e-19 1.009510e-19 4.555993e-03
## [186] 1.009510e-19
##
## $value
## [1] 9.144285
##
## $options
## $options$bmat
## [1] "I"
##
## $options$n
## [1] 186
##
## $options$which
## [1] "LA"
##
## $options$nev
## [1] 1
##
## $options$tol
## [1] 0
##
## $options$ncv
## [1] 0
##
## $options$ldv
## [1] 0
##
## $options$ishift
## [1] 1
##
## $options$maxiter
## [1] 3000
##
## $options$nb
## [1] 1
##
## $options$mode
## [1] 1
##
## $options$start
## [1] 1
##
## $options$sigma
## [1] 0
##
## $options$sigmai
## [1] 0
##
## $options$info
## [1] 0
##
## $options$iter
## [1] 3
##
## $options$nconv
## [1] 1
##
## $options$numop
## [1] 40
##
## $options$numopb
## [1] 0
##
## $options$numreo
## [1] 30
##
##
## $centralization
## [1] 0.9122258
##
## $theoretical_max
## [1] 184
Плотность, диаметр, компоненты связности в igraph
Плотность / density
edge_density(guerre_full)
## [1] 0.03103749
Диаметр / diameter
diameter(guerre_full, directed = FALSE, unconnected = TRUE)
## [1] 14
Компонента связности / component connectivity
comp = components(guerre_full, mode = "strong")
# Количество компонент
comp$no
## [1] 6
# Размеры компонент
comp$csize
## [1] 181 1 1 1 1 1
# Членство узлов в компонентах
comp$membership
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 4 5 1
## [186] 6
split(V(guerre_full)$State.Abb, comp$membership)
## $`1`
## [1] "USA" "CAN" "BHM" "CUB" "HAI" "DOM" "JAM" "TRI" "BAR" "DMA" "GRN" "SLU"
## [13] "SVG" "AAB" "SKN" "MEX" "BLZ" "GUA" "HON" "SAL" "NIC" "COS" "PAN" "COL"
## [25] "VEN" "GUY" "SUR" "ECU" "PER" "BRA" "BOL" "PAR" "CHL" "ARG" "URU" "UKG"
## [37] "IRE" "NTH" "BEL" "LUX" "FRN" "MNC" "LIE" "SWZ" "SPN" "AND" "POR" "GMY"
## [49] "POL" "AUS" "HUN" "CZR" "SLO" "ITA" "SNM" "MLT" "ALB" "MAC" "CRO" "YUG"
## [61] "BOS" "SLV" "GRC" "CYP" "BUL" "MLD" "ROM" "RUS" "EST" "LAT" "LIT" "UKR"
## [73] "BLR" "ARM" "GRG" "AZE" "FIN" "SWD" "NOR" "DEN" "CAP" "STP" "GNB" "EQG"
## [85] "GAM" "MLI" "SEN" "BEN" "MAA" "NIR" "CDI" "GUI" "BFO" "LBR" "SIE" "GHA"
## [97] "TOG" "CAO" "NIG" "GAB" "CEN" "CHA" "CON" "DRC" "UGA" "KEN" "TAZ" "BUI"
## [109] "RWA" "SOM" "DJI" "ETH" "ERI" "ANG" "MZM" "ZAM" "ZIM" "MAW" "SAF" "NAM"
## [121] "LES" "BOT" "SWA" "MAG" "COM" "MAS" "SEY" "MOR" "ALG" "TUN" "LIB" "SUD"
## [133] "IRN" "TUR" "IRQ" "EGY" "SYR" "LEB" "JOR" "ISR" "SAU" "YEM" "KUW" "BAH"
## [145] "QAT" "UAE" "OMA" "AFG" "TKM" "TAJ" "KYR" "UZB" "KZK" "CHN" "MON" "TAW"
## [157] "PRK" "ROK" "JPN" "IND" "BHU" "PAK" "BNG" "MYA" "SRI" "MAD" "NEP" "THI"
## [169] "CAM" "LAO" "DRV" "MAL" "SIN" "BRU" "PHI" "INS" "AUL" "PNG" "VAN" "SOL"
## [181] "FSM"
##
## $`2`
## [1] "ICE"
##
## $`3`
## [1] "NEW"
##
## $`4`
## [1] "FIJ"
##
## $`5`
## [1] "MSI"
##
## $`6`
## [1] "WSM"
plot(guerre_full, vertex.color = comp$membership)
Продвинутые метрики в network
igraph и network / sna
конфликтуют между собой, поэтому сначала необходимо отключить один из
пакетов
detach("package:igraph", unload = TRUE)
library(network)
##
## 'network' 1.19.0 (2024-12-08), part of the Statnet Project
## * 'news(package="network")' for changes since last version
## * 'citation("network")' for citation information
## * 'https://statnet.org' for help, support, and other information
library(sna)
## Loading required package: statnet.common
##
## Attaching package: 'statnet.common'
## The following objects are masked from 'package:base':
##
## attr, order, replace
## sna: Tools for Social Network Analysis
## Version 2.8 created on 2024-09-07.
## copyright (c) 2005, Carter T. Butts, University of California-Irvine
## For citation information, type citation("sna").
## Type help(package="sna") to get started.
Загрузим датасет с прошлой пары — про связи детей в классе
edgeNet = read.csv("classroom-edges.csv", header = T, stringsAsFactors = F) %>% network(directed = T)
Плотность / density
gden(edgeNet)
## [1] 0.1466667
Диаметр / diameter
geodist(edgeNet)$gdist %>% max(., na.rm = TRUE)
## [1] Inf
Очень грустно — диаметр оказался бесконечным (существуют бесконечные расстояния). Скорее всего, в графе несколько сильно связных подграфов вместо одного. Простое решение — посчитать диаметр для ненаправленного графа.
a = network(edgeNet[,], directed = F)
geodist(a)$gdist %>% max(., na.rm = TRUE)
## [1] 4
Компонента связности / component connectivity
sna::components(edgeNet, connected = "strong")
## [1] 8
# Несколько компонент, посчитаем диаметр для крупнейшей
component.dist(edgeNet, connected = "strong")
## $membership
## [1] 1 1 1 2 2 1 2 3 4 5 6 1 1 1 1 1 1 1 1 7 7 7 1 8 1
##
## $csize
## [1] 14 3 1 1 1 1 3 1
##
## $cdist
## [1] 5 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
largest = component.largest(edgeNet, result = "graph")
largest
## 1003 1006 1009 1018 1039 1042 1045 1048 1051 1054 1057 1060 1072 1078
## 1003 0 0 0 1 0 0 0 0 1 0 0 0 1 0
## 1006 0 0 1 0 0 1 0 0 0 0 1 0 0 1
## 1009 0 1 0 0 0 0 0 0 0 0 1 0 0 1
## 1018 0 0 0 0 0 1 0 1 1 0 0 1 1 0
## 1039 0 0 0 1 0 1 0 0 0 0 0 0 0 0
## 1042 0 1 0 1 1 0 0 0 1 0 0 0 0 0
## 1045 0 0 0 1 0 1 0 0 0 0 0 0 0 0
## 1048 0 0 0 1 0 1 1 0 1 1 0 0 0 0
## 1051 0 0 0 1 0 1 1 1 0 1 0 0 0 0
## 1054 0 0 0 1 1 0 0 1 1 0 0 0 1 0
## 1057 0 0 1 0 0 0 0 0 0 0 0 0 0 1
## 1060 1 0 0 1 0 1 0 0 1 0 0 0 0 0
## 1072 1 0 0 1 0 0 0 0 1 0 0 0 0 0
## 1078 0 1 1 0 0 0 0 0 0 0 1 0 0 0
geodist(network(largest))$gdist %>% max(., na.rm = TRUE)
## [1] 6
Визуализации больших сетей
Визуализации на базе network
gplot(contig_1993, gmode = "graph",
label = colnames(contig_1993[,]),
label.cex = 0.5, label.col = "blue")
#quartz() или windows()
#coords = gplot(contig_1993, interactive = TRUE)
#gplot(contig_1993, coord = coords)
gplot(contig_1993, gmode = "graph",
label = ifelse(evcent(contig_1993) > 0.1, colnames(contig_1993[,]), ""),
label.cex = 0.7, label.col = "blue",
displayisolates = F, vertex.cex = 10 * evcent(contig_1993))
Визуализация igraph
detach("package:sna", unload = TRUE)
detach("package:network", unload = TRUE)
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
plot(
guerre_full,
vertex.label = ifelse(betweenness(guerre_full) > 1000, V(guerre_full)$State.Abb, NA),
vertex.size = betweenness(guerre_full) / 500,
vertex.label.cex = 0.7,
vertex.label.color = "blue",
main = "Graph with Betweenness Centrality Labels"
)
Создадим интерактивный график. Документацию по пакету можно найти здесь: https://datastorm-open.github.io/visNetwork/
#install.packages("visNetwork")
library(visNetwork)
visIgraph(guerre_full) %>%
visOptions(highlightNearest = T, nodesIdSelection = T) %>%
visLayout(randomSeed = 123)
# Custom
nodes = data.frame(
id = 1:vcount(guerre_full),
label = V(guerre_full)$State.Abb,
title = paste("Node", V(guerre_full)$State.Abb),
size = 25,
color = "orange",
font.size = 14,
font.color = "black"
)
edges = data.frame(
from = as.vector(get.edgelist(guerre_full)[,1]),
to = as.vector(get.edgelist(guerre_full)[,2]),
color = "gray"
)
visNetwork(nodes, edges) %>%
visOptions(
highlightNearest = list(enabled = TRUE, hover = TRUE),
nodesIdSelection = TRUE,
) %>% visPhysics(stabilization = FALSE) %>%
visLayout(randomSeed = 123)
Групповое задание — заявка на проект
Проектные заявки сдавать в форму по этой ссылке
Структура заявки на проект:
ФИО двух-трёх участников (один человек — одна группа, по одиночке нельзя). Если вы не можете найти себе пару, напишите мне на почту aganov.artem@yandex.ru как можно скорее.
Исследовательский вопрос — не может быть задан в форме да/нет; ваша задача узнать, как/почему нечто происходит и/или провести разведочный анализ.
Структура данных и ссылка на них. Из приложенных вами сведений должно быть понятно, откуда вы взяли ваши данные, как они соотносятся с вашим исследовательским вопросом, а также как они внутренне организованы.
Просто приложить ссылку на датасет без кодбука и описания не имеет смысла — лучше ссылка на сайт, где будут выложены все эти вещи. Если существует только файл с данными, напишите в нескольких предложениях, какие переменные вам нужны и откуда взялись данные: кто их собирал, когда, о чём и зачем.